//最少转弯问题
#include <iostream>
#include <queue>
using namespace std;

const int MAXN=100;
struct Postion
{
    int x,y;
    int dep;
};
int dir_offset[4][2]={
    {-1,0},{1,0},{0,-1},{0,1}
};
int n,m;
int map[MAXN+1][MAXN+1];
int visited[MAXN+1][MAXN+1];
queue<Postion> qu;

void search(int x1,int y1,int x2,int y2){
    Postion start={x1,y1,0};
    qu.push(start);
    visited[x1][y1]=true;
    while (!qu.empty()){
        Postion cur=qu.front();
        qu.pop();
        if (cur.x==x2&&cur.y==y2){
            cout<<cur.dep-1;
            return;
        }else {
            for(int d=0;d<4;d++){
                int k=0;//在同一方向上能够一直向前走的位置为同一条直线，让它们的dep相同即可。
                while(1){
                    k++;
                    int newx=cur.x+k*dir_offset[d][0];
                    int newy=cur.y+k*dir_offset[d][1];
                    if ((newx<1)||(newx>n)||(newy<1)||(newy>m)) break;
                    if (map[newx][newy]==1) break;
                    if (!visited[newx][newy]){
                        Postion next={newx,newy,cur.dep+1};
                        qu.push(next);
                        visited[newx][newy]=true;
                    }
                }
            }
        }
    }
}
int main(){
    cin>>n>>m;
    for(int x=1;x<=n;x++)
        for(int y=1;y<=m;y++) cin>>map[x][y];
    int x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    search(x1,y1,x2,y2);
}
